.TH std::vector::data 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::vector::data \- std::vector::data

.SH Synopsis
   T* data();             \fB(1)\fP (noexcept since C++11)
                              (constexpr since C++20)
   const T* data() const; \fB(2)\fP (noexcept since C++11)
                              (constexpr since C++20)

   Returns pointer to the underlying array serving as element storage. The pointer is
   such that range [data(), data() + size()) is always a valid range, even if the
   container is empty (data() is not dereferenceable in that case).

.SH Parameters

   \fI(none)\fP

.SH Return value

   Pointer to the underlying element storage. For non-empty containers, the returned
   pointer compares equal to the address of the first element.

.SH Complexity

   Constant.

.SH Notes

   If size() is 0, data() may or may not return a null pointer.

.SH Example


// Run this code

 #include <cstddef>
 #include <iostream>
 #include <span>
 #include <vector>

 void pointer_func(const int* p, std::size_t size)
 {
     std::cout << "data = ";
     for (std::size_t i = 0; i < size; ++i)
         std::cout << p[i] << ' ';
     std::cout << '\\n';
 }

 void span_func(std::span<const int> data) // since C++20
 {
     std::cout << "data = ";
     for (const int e : data)
         std::cout << e << ' ';
     std::cout << '\\n';
 }

 int main()
 {
     std::vector<int> container{1, 2, 3, 4};

     // Prefer container.data() over &container[0]
     pointer_func(container.data(), container.size());

     // std::span (C++20) is a safer alternative to separated pointer/size.
     span_func({container.data(), container.size()});
 }

.SH Output:

 data = 1 2 3 4
 data = 1 2 3 4

  Defect reports

   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.

      DR    Applied to         Behavior as published              Correct behavior
   LWG 464  C++98      vector did not have this member       added
                       function
   LWG 1312 C++98      the return type were pointer and      changed to T* and const T*
                       const_pointer                         respectively

.SH See also

   front   access the first element
           \fI(public member function)\fP
   back    access the last element
           \fI(public member function)\fP
   size    returns the number of elements
           \fI(public member function)\fP
   span    a non-owning view over a contiguous sequence of objects
   (C++20) \fI(class template)\fP
   data    obtains the pointer to the underlying array
   \fI(C++17)\fP \fI(function template)\fP
